#define _CRT_SECURE_NO_WARNINGS 1


#include <stdio.h>

//int main()
//{
//	//int r = 7 / 2;
//	//printf("%d\n", r);
//	//double d = 7 / 2;
//	//printf("%lf\n", d);//3.5?
//
//
//
//	double d = 7 / 2.0;
//	printf("%lf\n", d);//3.5?
//
//	return 0;
//}


//int main()
//{
//	int n = 0;
//	int r = 5 / n;
//
//	return 0;
//}


//int main()
//{
//	int r = 15 % 8;//% 得到的是整除后的余数
//	printf("%d\n", r);
//
//	return 0;
//}


//int main()
//{
//	int a = 15;
//	int b = a >> 1;//移动的是a中的2进制信息
//
//	return 0;
//}

//int main()
//{
//	int a = 15;
//	//00000000000000000000000000001111 - 原码
//	//00000000000000000000000000001111 - 反码
//	//00000000000000000000000000001111 - 补码
//
//	int b = -15;
//	//10000000000000000000000000001111 - 原码
//	//11111111111111111111111111110000 - 反码(原码的符号位不变，其他位按位取反得到的就是反码)
//	//11111111111111111111111111110001 - 补码(反码+1就是补码)
//	
//	//整数在内存中存储的是补码
//	//计算的时候也是使用补码计算的
//	return 0;
//}

//移位移动的是补码的二进制序列
//int main()
//{
//	int a = 15;
//	int b = a >> 1;
//	printf("%d\n", b);//7
//	printf("%d\n", a);//15
//
//	return 0;
//}

//int main()
//{
//	int a = -15;
//	int b = a >> 1;
//	printf("%d\n", b);//-8
//	printf("%d\n", a);//-15
//
//	return 0;
//}

//int main()
//{
//	int a = 6;
//	//左移操作符 - 左边丢弃，右边补0
//	//[00000000000000000000000000000110] - 6的补码
//	//[00000000000000000000000000001100] - 补码
//
//	int b = a << 1;
//	printf("%d\n", b);//12
//	printf("%d\n", a);//6
//
//	//a = a << 1;
//	//a <<= 1;
//	//a = a + 1;
//	//a += 1;
//
//	return 0;
//}


//int main()
//{
//	int a = 5;
//	int b = a >> -2;//标准未定义行为
//
//	return 0;
//}


//int main()
//{
//	int a = 3;
//	//00000000000000000000000000000011 - 补码
//	int b = -5;
//	//10000000000000000000000000000101
//	//11111111111111111111111111111010
//	//11111111111111111111111111111011 - 补码
//	int c = a & b;
//	//& -- 对应二进制位有0则为0，两个同时为1，才是1
//	//00000000000000000000000000000011
//	//11111111111111111111111111111011
//	//00000000000000000000000000000011 - 补码
//	printf("%d\n", c);//3
//
//	return 0;
//}


//int main()
//{
//	int a = 3;
//	//00000000000000000000000000000011 - 补码
//	int b = -5;
//	//10000000000000000000000000000101
//	//11111111111111111111111111111010
//	//11111111111111111111111111111011 - 补码
//	int c = a | b;
//	//| -- 按（2进制）位或 - 对应的二进制位有1则为1，两个同时为0才是0
//	//00000000000000000000000000000011
//	//11111111111111111111111111111011
//	//11111111111111111111111111111011 - 补码
//	//11111111111111111111111111111010
//	//10000000000000000000000000000101 - 原码
//	printf("%d\n", c);//-5
//
//	return 0;
//}


//int main()
//{
//	int a = 3;
//	//00000000000000000000000000000011 - 补码
//	int b = -5;
//	//10000000000000000000000000000101
//	//11111111111111111111111111111010
//	//11111111111111111111111111111011 - 补码
//	int c = a ^ b;
//	//^ - 按（二进制）位异或 - 对应的二进制位相同为0，相异为1
//	//00000000000000000000000000000011
//	//11111111111111111111111111111011
//	//11111111111111111111111111111000 - 补码
//	//11111111111111111111111111110111
//	//10000000000000000000000000001000 - 原码
//	printf("%d\n", c);//-8
//
//	return 0;
//}



//& | 一会举例子
//^

//交换2个整型变量

//int main()
//{
//	int a = 3;
//	int b = 5;
//	printf("交换前: a=%d b=%d\n", a, b);
//	int tmp = a;
//	a = b;
//	b = tmp;
//	printf("交换后: a=%d b=%d\n", a, b);
//
//	return 0;
//}


//不能创建临时变量（第三个变量），实现两个整数的交换

//int main()
//{
//	int a = 3;
//	int b = 5;
//	printf("交换前: a=%d b=%d\n", a, b);
//	
//	/*a = a + b;
//	b = a - b;
//	a = a - b;*/  //但是有缺陷，a和b如果都很大，它们的和放到a里面会放不下（溢出），被截断
//	
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//
//	printf("交换后: a=%d b=%d\n", a, b);
//
//	return 0;
//}


//int main()
//{
//	int a = 3;
//	int b = 5;
//
//	//a^a -> 0
//	//a^0 = a
//	//异或是支持交换律的
//	//a^b^a = 5
//	//011
//	//101
//	//110
//	//011
//	//101
//	//a^a^b = 5
//
//	return 0;
//}


//int main()
//{
//	int flag = 0;
//
//	if (0 == flag)
//	{
//		printf("hehe\n");
//	}
//
//	if (!flag)//flag 为假 打印hehe
//	{
//		printf("hehe\n");
//	}
//
//	if (flag)
//	{
//		printf("haha\n");
//	}
//
//	return 0;
//}


//int main()
//{
//	int a = 5;
//	int b = -a;
//	printf("%d\n", b);
//
//	return 0;
//}


//& * 应用于指针

//int main()
//{
//	int a = 10;
//	//pa是指针变量
//	int *pa = &a;//&-取地址操作符-取出a的地址
//
//	*pa = 20;//解引用操作符（间接访问操作符）-单目操作符-通过pa中存放的地址，找到指向的空间（内容）
//	int c = *pa;
//
//	return 0;
//}


//int main()
//{
//	int a = 10;
//	printf("%d\n", sizeof(int));
//	printf("%d\n", sizeof(a));
//	printf("%d\n", sizeof a);//说明sizeof不是函数
//
//	return 0;
//}


//int main()
//{
//	int arr[10] = { 0 };
//	printf("%d\n", sizeof(arr));//40 - 计算整个数组的大小，单位字节
//	printf("%d\n", sizeof(int[10]));
//	
//	return 0;
//}



//~ 按补码二进制位取反

//int main()
//{
//	int a = 0;
//	printf("%d\n", ~a);
//	//00000000000000000000000000000000
//	//11111111111111111111111111111111 - 补码
//	//11111111111111111111111111111110
//	//10000000000000000000000000000001 - 原码
//
//	return 0;
//}


//int main()
//{
//	int a = 13;
//	//00000000000000000000000000001101
//	//00000000000000000000000000010000
//	a |= (1 << 4);
//	printf("%d\n", a);
//	
//	//00000000000000000000000000011101
//	//11111111111111111111111111101111
//	//00000000000000000000000000001101
//	a &= (~(1 << 4));
//	printf("%d\n", a);
//
//	return 0;
//}


//int main()
//{
//	int a = 0;
//
//	while (1 == scanf("%d", &a))
//	{
//		printf("%d\n", a);
//	}
//
//	return 0;
//}


//int main()
//{
//	int a = 0;
//	//scanf 读取失败返回的是EOF
//	while (scanf("%d", &a) != EOF)
//	{
//		printf("%d\n", a);
//	}
//
//	return 0;
//}


//int main()
//{
//	int a = 0;
//	//scanf 读取失败返回的是EOF
//	//假设scanf 读取失败，返回EOF ---> -1
//	//11111111111111111111111111111111 - 补码
//	//00000000000000000000000000000000
//	while (~scanf("%d", &a))
//	{
//		printf("%d\n", a);
//	}
//
//	return 0;
//}



//--前置、后置--
//++前置、后置++

//int main()
//{
//	int a = 1;
//	int b = a++;//后置++，先使用，后++
//	//b=a,a=a+1
//	printf("a=%d b=%d\n", a, b);//2 1
//
//	return 0;
//}


//int main()
//{
//	int a = 1;
//	int b = a--;//后置--，先使用，后--
//	//b=a,a=a-1
//	printf("a=%d b=%d\n", a, b);//0 1
//
//	return 0;
//}


//int main()
//{
//	int a = 1;
//	int b = ++a;//前置++，先++，后使用
//	//a=a+1,b=a
//	printf("a=%d b=%d\n", a, b);//2 2
//
//	return 0;
//}


//int main()
//{
//	int a = 1;
//	int b = --a;//前置--，先--，后使用
//	//a=a-1,b=a
//	printf("a=%d b=%d\n", a, b);//0 0
//
//	return 0;
//}


//int main()
//{
//	int a = 10;
//	printf("%d\n", a++);//10
//	printf("%d\n", a);//11
//
//	return 0;
//}


//int main()
//{
//	int a = (int)3.14;//强制
//	printf("%d\n", a);
//	// int a = int(3.14)//err
//
//	return 0;
//}


//#include <stdio.h>
//void test1(int arr[])//int*
//{
//	printf("%d\n", sizeof(arr));//(2)
//}
//void test2(char ch[])//char*
//{
//	printf("%d\n", sizeof(ch));//(4)
//}
//int main()
//{
//	int arr[10] = { 0 };
//	char ch[10] = { 0 };
//	printf("%d\n", sizeof(arr));//(1)
//	printf("%d\n", sizeof(ch));//(3)
//	test1(arr);//&arr[0]
//	test2(ch);//&ch[0]
//	return 0;
//}


//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	//a 和 b 都是5 打印hehe
//	if (5 == a && 5 == b)
//	{
//		printf("hehe\n");
//	}
//	//a 或者 b是5 打印haha
//	if (5 == a || 5 == b)
//	{
//		printf("haha\n");
//	}
//
//	return 0;
//}


//int main()
//{
//	int y = 0;
//	scanf("%d", &y);
//	//1. 能被4整除，并且不能被100整除
//	//2. 能被400整除是闰年
//	if (((0==y%4)&&(y%100!=0)) || (0==y%400))
//	{
//		printf("闰年\n");
//	}
//	else
//	{
//		printf("不是闰年\n");
//	}
//
//	return 0;
//}


//&& 操作符，左边为假，右边就不计算了
//|| 操作符，左边为真，右边不再计算

//#include <stdio.h>
//int main()
//{
//	int i = 0, a = 0, b = 2, c = 3, d = 4;
//	i = a++ && ++b && d++;
//	//i = a++||++b||d++;
//	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
//	return 0;
//}


//逻辑操作符
//&& || ! - 计算结果是真，使用1表示
int main()
{
	int a = 3 && 5;
	printf("%d\n", a);

	return 0;
}